package com.project.server;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
 * 使用注解实现servlet工厂
 */
public class AnnotationServletFactory {

    private static Map<String,Servlet> servletMap = new HashMap<>();
    static{
        //得到业务组件所在包的文件对象
        File file = new File("E:\\j192extest\\src\\main\\java\\com\\project\\service");
        //检测文件夹中的文件列表
        File[] fileArray = file.listFiles();
        try {
            for (File f : fileArray) {
                if (f.getName().endsWith(".java")) {//判断是否以java后缀，只要以.java后缀表示是业务组件类
                    //得到去除后缀后的文件名
                    String fileName = f.getName().substring(0, f.getName().lastIndexOf("."));
                    //得到业务组件类的全路径
                    String className = "com.project.service." + fileName;

                    //加载类得到类模版
                    Class c = Class.forName(className);
                    //判断该类是否有Webservlet注解,确保该类是业务组件类
                    if(c.isAnnotationPresent(WebServlet.class)){
                        //取出该注解
                        WebServlet w = (WebServlet) c.getAnnotation(WebServlet.class);

                        servletMap.put(w.value(),(Servlet)c.getConstructor().newInstance());
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    public static Servlet getServlet(String url){
        return servletMap.get(url);
    }

    public static void main(String[] args) {
        Servlet s1 = servletMap.get("add");
        Servlet s2 = servletMap.get("add");
        System.out.println(servletMap.get("add"));
        System.out.println(s1 == s2);
    }
}
